package main

import (
	"GormData/models/relation_table"
	_ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动
	"github.com/jinzhu/gorm"
)

func main() {
	// 用户名：密码@tcp(ip:port)/数据库?charset=utf8&parseTime=True&loc=Local
	db, err := gorm.Open("mysql", "root:123456@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}

	defer db.Close() // 关闭空闲的连接

	// 增加
	//user := relation_table.User2{
	//	Name: "Jackson",
	//	Age:  48,
	//	Addr: "深圳",
	//	Article: []relation_table.Article{
	//		{
	//			Title:   "Java",
	//			Content: "Java编程",
	//			Desc:    "教你快速学会Java",
	//		}, {
	//			Title:   "C++",
	//			Content: "C++编程",
	//			Desc:    "教你快速学会C++",
	//		},
	//	},
	//}
	//
	//ret := db.Create(&user)
	//
	//article := relation_table.Article2{
	//	Title:   "C++",
	//	Content: "C++编程",
	//	Desc:    "教你快速学会C++",
	//}

	//fmt.Println(ret.RowsAffected)
	//fmt.Println(ret.Error)

	//// 查询
	//// 查询方法1： preload
	//var f_user relation_table.User2
	//db.Preload("Article").Find(&f_user, 1) // 关系名
	//fmt.Println(f_user)
	//// 方法2： Association
	//var f_user2 relation_table.User2
	//db.First(&f_user2, 2)
	//db.Model(&f_user2).Association("Article").Find(&f_user2.Article)
	//fmt.Println(f_user2)
	////方法3: Related
	//var f_user3 relation_table.User2
	//db.First(&f_user3, 1)
	//var article []relation_table.Article
	//db.Model(&f_user3).Related(&article, "Article")
	//fmt.Println(f_user3)
	//fmt.Println(article)

	//更新
	// 先查询
	//var update_user relation_table.User2
	//db.Preload("Article").First(&update_user, 3) // 关系名
	//再更新,更新指定条件，不然会把所有满足条件的都更新
	//db.Model(&update_user).Where("name=? and id=?", "wusir", 3).Update("age", 36) //
	//db.Model(&update_user.Articles).Where("title=? and uid=?","标题测试2",2).Update("uid",3) // name和uid限制条件
	// update只能更新一个字段，如果想同时更新多个字段，使用save

	// 删除
	// 先查询
	var del_user relation_table.User2
	db.Preload("Article").First(&del_user, 5)

	//再删除,删除要指定条件，不然会把所有满足条件的都删除
	db.Delete(&del_user.Article, "title=? and uid=?", "C++", 4)
	// where
	db.Where("title=? and uid=?", "Java", 4).Delete(&del_user.Article)
}
